/*
 * @Author: zqg
 * @Date: 2021-02-22 23:34:07
 * @LastEditors: zqg
 * @LastEditTime: 2021-03-20 19:01:33
 * @Description: 绩效考核相关处理
 */
// 考核类型枚举
export const performanceAssessmentTypes = {
  ordinary: {
    type: 0,
    title: '普通考核'
  },
  accessories: {
    type: 1,
    title: '配件考核'
  },
  project: {
    type: 2,
    title: '项目考核'
  }
}
/**
 * @description: 获取规则表头信息
 * @param {String} 考核类型
 * @return {Object[]}
 */
export function getRuleTableColumn(type) {
  const commonColumn = [
    {
      name: '考核规则',
      type: 'render',
      render: row => {
        if (valueScope.value === row.ruleScope) {
          const scope = row.ruleValue.split('-')
          return `${row.ruleCondition}${scope[0]}${row.ruleUnit}-${scope[1]}${row.ruleUnit}`
        } else {
          return `${row.ruleCondition}${row.ruleScope}${row.ruleValue}${row.ruleUnit}`
        }
      }
    },
    {
      name: '绩效',
      type: 'renderHtml',
      render: row => {
        const addSvg = require('../assets/icon/jiahao.svg')
        const reductionSvg = require('../assets/icon/jianhao.svg')
        const content =
          row.performanceAmountRule === '固定金额'
            ? row.performanceAmount + '元'
            : `${row.performanceTarget}${row.performanceComputingMethod}${row.performanceValue}${row.performanceUnit}`
        return (
          `<image style="width:20px;vertical-align: top;" src="${row.performanceType === '提成' ? addSvg : reductionSvg
          }"/>` + `<span  style="vertical-align: top;">${content}</span>`
        )
      }
    },
    { name: '规则说明', value: 'remark', type: 'text' }
  ]
  switch (type) {
    case performanceAssessmentTypes.ordinary.type:
      return [
        { name: '指标值', value: 'targetValue', type: 'text' },
        { name: '考核值', value: 'assessValue', type: 'text' },
        ...commonColumn
      ]
    case performanceAssessmentTypes.accessories.type:
      return [
        {
          name: '配件名称',
          type: 'render',
          render: row => {
            return row.chooseAccessoriesInfo.partsName
          }
        },
        {
          name: '配件类型',
          type: 'render',
          render: row => {
            return row.chooseAccessoriesInfo.partsDictValue
          }
        },
        {
          name: '配件单位',
          type: 'render',
          render: row => {
            return row.chooseAccessoriesInfo.unit
          }
        },
        ...commonColumn
      ]
    case performanceAssessmentTypes.project.type:
      return [
        {
          name: '项目名称',
          type: 'render',
          render: row => {
            return row.chooseProjectInfo.projectName
          }
        },
        {
          name: '项目类型',
          type: 'render',
          render: row => {
            return row.chooseProjectInfo.projectDictValue
          }
        },
        {
          name: '项目金额',
          type: 'render',
          render: row => {
            return row.chooseProjectInfo.amount
          }
        },
        {
          name: '项目工时',
          type: 'render',
          render: row => {
            return row.chooseProjectInfo.workHours
          }
        },
        ...commonColumn
      ]
    default:
      return []
  }
}
// 考核值类型选项列表
export const assessmentTypeOption = [
  {
    id: '1', value: '维修产值', tip: `指标产值：手动输入指标产值
      维修产值：所有工单的实际支付金额
      差额产值：指标产值与实际产值的差
      维修产值来源：工单实付金额`
  },
  { id: '2', value: '一次性毛利', tip: '一次性毛利：产值-成本（配件金额+人工金额）' },
  {
    id: '3', value: '一般维修产值', tip: `一般维修产值：不含钣金和油漆，衍生业务
  超出部分：超过一般维修产值的剩余金额
  一般维修产值来源：项目类型和配件类型为一般维修类` },
  {
    id: '4', value: '出台次数', tip: `台次：工单出厂的车辆
  出厂台次来源：工单关联车辆` },
  { id: '5', value: '衍生业务产值', tip: `衍生业务产值：养护类，美容类，改装类，保险，延保等衍生业务产值来源:项目和配件为非一般维修类型的配件金额与人工金额的和` },
  {
    id: '6', value: '精品产值', tip: `精品总产值：所有销售精品的金额
  总产值：就是精品总产值` },
  { id: '7', value: '商业险ASP', tip: '商业险ASP' },
  { id: '8', value: '工时', tip: '' },
  {
    id: '9', value: '装饰毛利', tip: `装饰毛利：精品毛利， 改装毛利，美容毛利
  装饰毛利来源：项目和配件类型为精品，改装，美容的配件及人工金额的和` },
  { id: '10', value: '延保', tip: '延保：续保金额' },
  {
    id: '11', value: '养护产品毛利', tip: `养护产品毛利：养护类产品和人工
  养护产品毛利来源：配件类型和项目类型为养护类的配件金额与人工金额的和
  ` },
  {
    id: '12', value: '美容产品毛利', tip: `美容产品毛利：美容类产品和人工
  美容产品毛利来源：配件类型和项目类型为美容类的配件金额与人工金额的和` },
  { id: '13', value: '续保', tip: '续保：根据保险单判断' },
  { id: '14', value: '镀金毛利', tip: '美容项目：镀金产品+人工' },
  { id: '15', value: '精洗内饰毛利', tip: '美容项目：精洗内饰产品+人工' },
  { id: '16', value: '奖励系数', tip: '奖励系数：手填奖励系数' },
  { id: '17', value: '网络调查', tip: '评分：手填评分' },
  { id: '18', value: '售后明检', tip: '评分：手填评分' },
  {
    id: '19', value: '事故线索留修率', tip: `留修率：通过保险公司事故线索信息，回店维修
  留修率来源：手填留修率` },
  { id: '20', value: '服务业绩', tip: '' },
  { id: '21', value: '纯正指数', tip: '纯正指数比例：原厂配件比例' },
  { id: '22', value: 'NSP（净推荐值）', tip: '评分：手填评分' },
  { id: '23', value: '首次付费实施率', tip: '首次付费实施率：第一次保养免费，再次进店为首次付费实施' },
  { id: '24', value: '配件供货率', tip: '需要材料和库房提供材料的比例（来源）' },
  {
    id: '25', value: '首保实施率', tip: `首保实施率：第一次保养
  首保实施：新车卖出后厂家会赠送首次保养，车辆必须要一定时间范围内进行保养，首保无其他增项客户不用付费，产生的费用由厂家补给店面` },
  { id: '26', value: '旧件次数', tip: '手动输入次数，罚款' },
  {
    id: '27', value: '超期库存占比', tip: `超期库存占比：设置超期时间
  超期库存占比：超期库存/总库存` },
  { id: '28', value: '安全管理', tip: '手动输入次数，罚款' },
  { id: '29', value: '终检报告', tip: '手动输入次数，罚款' },
  { id: '30', value: '配件周转率', tip: '配件周转率：入库时长，在限定时间内使用 罚款' },
  { id: '31', value: '配件盘存', tip: '罚款' },
  { id: '32', value: '招揽回厂', tip: '手动录入数量' },
  { id: '33', value: '重大抱怨投诉', tip: '手填次数' },
  { id: '34', value: '超额奖励', tip: '手填超额奖励' }
]
// 指标值值类型选项列表
export const parameterTypeOption = [
  { id: '1', value: '目标产值', label: '目标产值' },
  { id: '2', value: '目标出厂台次', label: '目标出厂台次' }
]
// 条件规则类型枚举
export const conditions = {
  upToStandard: {
    id: 1,
    value: '达标率'
  },
  Assessment: {
    id: 2,
    value: '考核值'
  },
  indicators: {
    id: 3,
    value: '指标值'
  }
}
// 条件规则范围选项列表-范围值
export const valueScope = {
  id: '-(至)',
  value: '-(至)'
}
// 条件规则范围选项列表-每个
const eachRuleScope = {
  id: '/1(每个)',
  value: '/1(每个)'
}
/**
 * @description: 获取对应条件规则范围选项列表
 * @param {String} 条件规则类型
 * @return {Object[]}
 */
export function getRuleScopeOption(type) {
  const list = [
    {
      id: '>',
      value: '>'
    },
    {
      id: '<',
      value: '<'
    },
    {
      id: '=',
      value: '='
    },
    {
      id: '<=',
      value: '<='
    },
    {
      id: '>=',
      value: '>='
    },
    {
      ...valueScope
    }
  ]
  if (conditions.upToStandard.value !== type) {
    list.push(eachRuleScope)
  }
  return list
}
/**
 * @description: 获取对应条件规则单位列表
 * @param {String} 条件规则类型
 * @param {String} 条件规则范围
 * @return {String[]}
 */
export function getConditionsUnitOption(type, RuleScope = '') {
  let list = []
  switch (type) {
    case conditions.upToStandard.value:
      list = ['%']
      break
    case conditions.Assessment.value:
    case conditions.indicators.value:
      list = ['%', '元', '台', '个', '次', '分']
      break
    default:
      break
  }
  if (RuleScope === eachRuleScope.value) {
    list = list.filter(item => item !== '%' && item !== '元')
  }
  return list
}
/**
 * @description: 获取绩效设置/本月汇总form基本数据字段
 * @param {Number} 绩效设置类型（1：绩效设置；2：本月汇总）
 * @return {Object}
 */
export function getPersonnelSettingData(setting = {}) {
  return {
    id: setting.id || 0,
    // 总汇 true 是本月总汇 false 绩效设置 boolean
    confluence: setting.id || false,
    // 编辑人姓名-详情返回 string
    userName: setting.userName || '',
    // 门店id integer($int32)
    storeId: setting.storeId || '',
    // 生效日期	string
    date: setting.date || new Date(),
    // 旧件罚款管理 integer($int32)
    jjfkgl: setting.jjfkgl || '',
    // 奖励系数	number($double)
    jlxs: setting.jlxs || '',
    // 目标定保 integer($int32)
    mbdb: setting.mbdb || '',
    // 目标首保 	integer($int32)
    mbsb: setting.mbsb || '',
    // 目标游离客户	integer($int32)
    mbylkh: setting.mbylkh || '',
    // 净推荐值 number($double)
    nps: setting.nps || '',
    // 配件盘库罚款 integer($int32)
    pjpkfk: setting.pjpkfk || '',
    // 售后网络调查 number($double)
    shScore: setting.shScore || '',
    // 出厂台次 integer($int32)
    targetNum: setting.targetNum || '',
    // 目标产值 number
    targetPrice: setting.targetPrice || '',
    // 销售网络调查 number($double)
    xsScore: setting.xsScore || '',
    // 重大抱怨投诉  integer($int32)
    zdbyts: setting.zdbyts || '',
    // 终检报告罚款 integer($int32)
    zjbgfk: setting.zjbgfk || '',
    // 招揽回厂罚款integer($int32)
    zlhcfk: setting.zlhcfk || '',
    // 安全罚款管理  integer($int32)
    aqfkgl: setting.aqfkgl || '',
  }
}
/**
 * @description: 获取绩效设置请求参数
 * @param {Object} 绩效设置
 * @return {*}
 */
export function getPersonnelSetParam(setting) {
  return {
    id: setting.id,
    confluence: setting.confluence,
    userName: setting.userName,
    storeId: setting.storeId,
    id: setting.id,
    date: setting.date,
    jjfkgl: +setting.jjfkgl,
    jlxs: +setting.jlxs,
    mbdb: +setting.mbdb,
    mbsb: +setting.mbsb,
    mbylkh: +setting.mbylkh,
    nps: +setting.nps,
    pjpkfk: +setting.pjpkfk,
    shScore: +setting.shScore,
    targetNum: +setting.targetNum,
    targetPrice: +setting.targetPrice,
    xsScore: +setting.xsScore,
    zdbyts: +setting.zdbyts,
    zjbgfk: +setting.zjbgfk,
    zlhcfk: +setting.zlhcfk,
    aqfkgl: +setting.aqfkgl,
  }
}

/**
 * @description: 获取绩效设置/本月汇总form表达内容
 * @param {Number} 绩效设置类型（1：绩效设置；2：本月汇总）
 * @return {Object[]}
 */
export function getPersonnelSettingFormColum(settingType = 1) {
  switch (settingType) {
    case 1:
      return [
        {
          label: '指标产值:',
          prop: 'targetPrice',
          unit: '元',
          tip: `指标产值：手动输入指标产值
          实际产值：所有工单的实际支付金额
          差额产值：指标产值与实际产值的差`
        },
        {
          label: '目标出厂台次:',
          prop: 'targetNum',
          unit: '台',
          tip: `台次：工单出厂的车辆
          出厂台次来源：工单关联车辆`
        },
        {
          label: '目标首保:',
          prop: 'mbsb',
          unit: '台',
          tip: `首保实施率：第一次保养
          首保实施：新车卖出后厂家会赠送首次保养，车辆必须要一定时间范围内进行保养，首保无其他增项客户不用付费，产生的费用由厂家补给店面`
        },
        {
          label: '目标定保:',
          prop: 'mbdb',
          unit: '台',
          tip: ''
        },
        {
          label: '目标游离客户:',
          prop: 'mbylkh',
          unit: '位',
          tip: ''
        }
      ]
    case 2:
      return [
        {
          label: '售后网络调查:',
          prop: 'shScore',
          unit: '分',
          tip: '手填评分'
        },
        {
          label: '销售网络调查:',
          prop: 'xsScore',
          unit: '分',
          tip: '手填评分'
        },
        {
          label: 'NPS（净推荐值）:',
          prop: 'nps',
          unit: '分',
          tip: '手填评分'
        },
        {
          label: '奖励系数:',
          prop: 'jlxs',
          unit: '%',
          tip: '手填奖励系数'
        },
        {
          label: '配件盘库罚款:',
          prop: 'pjpkfk',
          unit: '次',
          tip: '手动输入次数，罚款'
        },
        {
          label: '重大抱怨投诉:',
          prop: 'zdbyts',
          unit: '次',
          tip: '手填次数'
        },
        {
          label: '旧件管理罚款:',
          prop: 'jjfkgl',
          unit: '次',
          tip: '手动输入次数，罚款'
        },
        {
          label: '安全管理罚款:',
          prop: 'aqfkgl',
          unit: '次',
          tip: '手动输入次数，罚款'
        },
        {
          label: '终检报告罚款:',
          prop: 'zjbgfk',
          unit: '次',
          tip: '手动输入次数，罚款'
        },
        {
          label: '招揽回厂罚款:',
          prop: 'zlhcfk',
          unit: '次',
          tip: '手动输入次数，罚款'
        }
      ]
  }
}
/**
 * @description: 获取绩效设置/本月汇总form验证规则
 * @param {Number} 绩效设置类型（1：绩效设置；2：本月汇总）
 * @return {Object[]}
 */
export function getPersonnelSettingRules(settingType = 1) {
  return {
    date: [
      {
        required: true,
        message: settingType === 1 ? '请选择生效时间' : '请选择汇总月份'
      }
    ],
    targetPrice: [
      { required: settingType === 1, message: '请输入指标产值' }
    ],
    targetNum: [
      { required: settingType === 1, message: '请输入目标出厂台次' }
    ],
    mbsb: [{ required: settingType === 1, message: '请输入目标首保' }],
    mbdb: [
      { required: settingType === 1, message: '请输入目标定保' }
    ],
    mbylkh: [{ required: settingType === 1, message: '请输入目标游离客户' }],
    shScore: [{ required: settingType === 2, message: '请输入售后网络调查' }],
    xsScore: [{ required: settingType === 2, message: '请输入销售网络调查' }],
    nps: [{ required: settingType === 2, message: '请输入NPS（净推荐值）' }],
    jlxs: [{ required: settingType === 2, message: '请输入奖励系数' }],
    pjpkfk: [{ required: settingType === 2, message: '请输入配件盘库罚款' }],
    zdbyts: [{ required: settingType === 2, message: '请输入重大抱怨投诉' }],
    jjfkgl: [{ required: settingType === 2, message: '请输入旧件管理罚款' }],
    aqfkgl: [{ required: settingType === 2, message: '请输入安全管理罚款' }],
    zjbgfk: [{ required: settingType === 2, message: '请输入终检报告罚款' }],
    zlhcfk: [{ required: settingType === 2, message: '请输入招揽回厂罚款' }],
  }
}
